// axios 公共配置
// 基地址
// 设置 baseURL 后，后续请求只需写相对路径（相对于 baseURL 的路径），axios 会自动拼接成完整 URL。
axios.defaults.baseURL = 'http://geek.itheima.net';

// 请求拦截器
axios.interceptors.request.use(function (config) {
  // 统一携带token令牌字符串
  const token = localStorage.getItem('token');
  // 短路操作，有则添加，没有不操作。
  token && (config.headers.Authorization = `Bearer ${token}`);
  // 发送请求之前的操作
  return config;
}, function(error) {
  // 请求错误时的操作
  return Promise.reject(error);
})

// 响应拦截器
axios.interceptors.response.use(function (response) {
// 2xx范围类状态码都是成功
  const result = response.data;
  return result;
}, function(error) {
  // 超出2xx的都算错误
  // 对401 身份验证失败进行同意处理
  // console.dir(error);
  // ?. 的作用是：在访问嵌套对象的属性时，如果中间某个属性为 null 或 undefined，不会抛出错误，而是直接返回 undefined，后续操作终止。
  // 使用其避免直接抛错终止程序
  if(error?.response?.status === 401) {
    alert('身份验证失败，请重新登录');
    localStorage.removeItem('token');
    // 相对于html文件的相对路径
    location.href = '../login/index.html';
  }
  return Promise.reject(error);
})